package net.oschina.victor.service;

import java.util.List;

import net.oschina.victor.entity.Organization;

/**
 * 组织机构管理相关服务
 * 
 * @author 刘源
 *
 */
public interface OrganizationService {
	/**
	 * 删除机构信息
	 * 
	 * @param organizationId
	 * @throws Exception
	 */
	void deleteOrganization(Long organizationId) throws Exception;

	/**
	 * 查询所有组织机构信息
	 * 
	 * @return
	 */
	List<Organization> findAll();

	/**
	 * 查询不包含机构号的组织机构列表
	 * 
	 * @param excludeOraganization
	 * @return
	 */
	Object findAllWithExclude(Organization excludeOraganization);

	/**
	 * 通过ID查询一个机构信息
	 * 
	 * @param organizationId
	 * @return
	 */
	Organization findById(Long organizationId);

	/**
	 * 查询子机构信息列表
	 * 
	 * @param id
	 * @return
	 */
	List<Organization> getChildren(Long id);

	/**
	 * 查询子机构信息列表(包含已经删除的机构信息)
	 * 
	 * @param id
	 * @return
	 */
	List<Organization> getChildrenAll(Long id);

	/**
	 * 移动组织机构
	 * 
	 * @param source
	 *            要移动的机构信息实体
	 * @param target
	 *            移动到机构的实体
	 */
	void move(Organization source, Organization target);

	/**
	 * 保存机构信息
	 * 
	 * @param organization
	 * @return
	 * @throws Exception 
	 */
	Organization saveOrganization(Organization organization) throws Exception;
}
